home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 2
/
Gekikoh Dennoh Club Vol. 2 (Japan).7z
/
Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin
/
fsw
/
pcm8pp
/
pcm8pp.tec
< prev
next >
Wrap
Text File
|
1996-11-02
|
17KB
|
568 lines
===============================================================================
マーキュリーユニット用PCMドライバー "PCM8++" version 0.83d
<<技術資料>>
(C)たにぃ 1994-1996
===============================================================================
--[ PCM データ形式に付いて ]---------------------------------------------------
PCM8PPが扱えるPCMデータは、以下の3種類です。
・ADPCM データ
従来の4bitADPCMデータです。
各周波数に対応しております。
・16bitPCM(signed) データ
従来の15.625KHzPCMデータに加え、16.0KHz、22.05KHz、24.0KHz、32.0KHz、
44.1KHz、48.0KHzのPCMデータが扱えます。#1
version0.50からのみですが、可変周波数に対応致しましたので、一応どのよ
うな周波数のPCMでも演奏が可能です。#2
#1 モトローラビッグエンディアンのデータです。
#2 周波数範囲に付いては後述。
・8bitPCM(signed) データ
従来の15.625KHzPCMデータに加え、16.0KHz、22.05KHz、24.0KHz、32.0KHz、
44.1KHz、48.0KHzのPCMデータが扱えます。
16bit同様に、可変周波数に対応。
・PCMデータ形式番号に付いて
trap #2 を使用した、ファンクションリクエストコールで扱える周波数、形
式のリストです。
番号 データ形式 出力 仕様
0H 3.9062KHz ADPCM Monoural
1H 5.2080KHz ADPCM Monoural
2H 7.8125KHz ADPCM Monoural
3H 10.4167KHz ADPCM Monoural
4H 15.6250KHz ADPCM Monoural
5H 16bit Signed PCM Monoural
6H 8bit Signed PCM Monoural
7H 16bit Signed PCM (Through) Monoural 再生周波数に左右される
8H 15.625Khz 16bit Signed PCM Monoural
9H 16.000Khz 16bit Signed PCM Monoural
AH 22.050Khz 16bit Signed PCM Monoural
BH 24.000Khz 16bit Signed PCM Monoural
CH 32.000Khz 16bit Signed PCM Monoural
DH 44.100Khz 16bit Signed PCM Monoural
EH 48.000Khz 16bit Signed PCM Monoural
FH Valiabled 16bit Signed PCM Monoural 周波数を可変出来る#1
10H 15.625Khz 8bit Signed PCM Monoural
11H 16.000Khz 8bit Signed PCM Monoural
12H 22.050Khz 8bit Signed PCM Monoural
13H 24.000Khz 8bit Signed PCM Monoural
14H 32.000Khz 8bit Signed PCM Monoural
15H 44.100Khz 8bit Signed PCM Monoural
16H 48.000Khz 8bit Signed PCM Monoural
17H Valiabled 8bit Signed PCM Monoural 周波数を可変出来る#1
18H 15.625Khz 16bit Signed PCM Stereo
19H 16.000Khz 16bit Signed PCM Stereo
1AH 22.050Khz 16bit Signed PCM Stereo
1BH 24.000Khz 16bit Signed PCM Stereo
1CH 32.000Khz 16bit Signed PCM Stereo
1DH 44.100Khz 16bit Signed PCM Stereo
1EH 48.000Khz 16bit Signed PCM Stereo
1FH Valiabled 16bit Signed PCM Stereo 周波数を可変出来る#1
20H 15.625Khz 8bit Signed PCM Stereo
21H 16.000Khz 8bit Signed PCM Stereo
22H 22.050Khz 8bit Signed PCM Stereo
23H 24.000Khz 8bit Signed PCM Stereo
24H 32.000Khz 8bit Signed PCM Stereo
25H 44.100Khz 8bit Signed PCM Stereo
26H 48.000Khz 8bit Signed PCM Stereo
27H Valiabled 8bit Signed PCM Stereo 周波数を可変出来る#1
28H Valiabled ADPCM Monoural 周波数を可変出来る#2
29H Valiabled 16bit Signed PCM Monoural 周波数を可変出来る#2
2AH-7FH Reserved. 予約
再生周波数には左右されません。(Through以外)
#1 v0.50以降のみに対応。
#2 v0.81以降のみに対応。
・可変周波数範囲に付いて
1Hz~16777214Hz(16777.214KHz)までとし、再生周波数×256を D3(L) に入れて
対象のデータ形式番号でコールする。
最低可変周波数単位は、1/256Hz=0.00390625Hzとなります。
これだけあれば十二分でしょう。
なお、再生中に周波数を変えたい時は、<< 動作モード変更 機能コード $007x >>
を使い、D1(L) に -1 を入れ、D3(L)に再生周波数×256を入れてコールす
ること。
また、パンやボリュームを変更しても構いません。モード自身は意味が無い
です。
※version0.80になって変更になりました。気を付けて下さい。
・モノラル固定周波数モードに付いて
5H 以降のデータ全てがスルーで出力されます。ご注意下さい。
(どのタイプで出力されても、今の所 16bit-Through Monoural になります。
8bitは出力されるがおかしいので使用しないで下さい。)
・データの音量に付いて
0H~6H,28Hは、3bit左シフトされています。(0.73未満は4bit)
8bitPCMは、5bit左シフトされています。
これらは、各種音量がまちまちなのをなるべく合わせる為にやっています。
但し、各種音量を変換するツールで変換したデータ及びADPCMに付いて再生し
た場合、16bitをオーバーフローし、ノイズを発生する事があります。
予めご了承下さい。(合成時にオーバーする場合があります。また、音量が
大きすぎる場合にも起こり得る事があります。)
また、ボリューム指定の拡張を行っております。
(ファンクションコール参照の事)
・リバース再生モードに付いて
拡張リンクアレイチェーン専用。(version 0.70以降のみ)
ADPCM、固定周波数モードでは常に通常で出力されます。
拡張リンクアレイチェーンテーブルのデータ長の所の、ビット31を立てて置く
と、リバース再生になります。
データポインタは常にデータブロック先頭を指すようにし、長さを奇数にし
ない様に注意して使用して下さい。
(逆にするからと言って、最終アドレスにする必要が無いと言う事です。)
作り様によっては単純ループ、逆再生ループ、オルタネイトループ等、各種
再生が出来ます。
--[ PCM8++ ファンクションリクエストコール ]------------------------------------
TRAP #2を使用した、PCM8(ホボ)上位互換となっております。
D0(W) に機能コードを設定し、必要であれば他のレジスタに適切な値を設定
した後、TRAP #2 でコールしてください。
戻り値は D0(L) に設定されます。また、他のレジスタは全て保存されます。
注) 下記の内容は、version 0.80 の時点のものです。
以前のバージョンでは一部動作が異なる場合があります。
#------------------------------------------------#
# 通常出力 機能コード $000x #
#------------------------------------------------#
機能: メモリ領域のデータを出力する。
呼出: D0(W) = $0000 + チャンネル番号(00H~0FH)
D1(L) = 音量/周波数/定位
bit 23~16 : 音量 (-1,0~15) #1
-1 を指定すると変更しません。
原音量は 8 。
1step = 2dB に相当する(-16dB~+14dB)。
bit 15~ 8 : 周波数、データ形式
-1 を指定すると変更しません。
データ形式についてはデータ形式の欄を参照の事。
bit 7~ 0 : 再生定位 (-1,0~3)
-1 を指定すると以前の値を保持する。
他の値については以下の通り。
0 : 停止 #2 2 : 右出力
1 : 左出力 3 : 左右出力
D2(L) = データ長
データ形式に拘わらず、バイト単位で指定する。
<0 : データ長問い合わせ(機能コード$008xと同等)
=0 : チャンネル停止
D3(L) = 再生周波数x256
可変周波数再生時、再生周波数を256倍した値を入れてコール
する。#3
可変周波数以外では効果はありません。
初期再生時等では常にクリアされているので、必ず何等かの値を
入れてコールする事。
A1(L) = データブロック先頭アドレス
戻値: D0(L) = 0 正常終了
注意:
#1 8bitPCM専用となりますが、(指定出来ますが)10H~4FHまでを0dB~-36.1dB
(20log10((X-10H)/64)で計算されます )に割り当てています。
但し、8bit左シフトされた上での話です。
また、50HはADPCM、Through以外であればアクティブにミュート出来ます。
#2 再生定位に於いて再生を停止した場合、データ形式、音量は変更
されません。
#3 version0.80になって変更されました。気を付けて下さい。
#------------------------------------------------#
# アレイチェーン出力 機能コード $001x #
#------------------------------------------------#
機能: アレイチェーンテーブルによりデータを出力する。
呼出: D0(W) = $0010 + チャンネル番号(00H~0FH)
D1(L) = 音量/周波数/定位
通常出力($000x)の欄参照の事。
D2(L) = チェーンテーブル個数
<0 : データ長問い合わせ(機能コード$008xと同等)
=0 : チャンネル停止
D3(L) = 再生周波数x256
再生周波数の説明は省略。
A1(L) = チェーンテーブル先頭アドレス
チェーテーブルについての説明は省略。
戻値: D0(L) = 0 正常終了
#------------------------------------------------#
# リンクアレイチェーン出力 機能コード $002x #
#------------------------------------------------#
機能: リンクアレイチェーンテーブルによりデータを出力する。
呼出: D0(W) = $0020 + チャンネル番号(00H~0FH)
D1(L) = 音量/周波数/定位
通常出力($000x)の欄参照の事。
D2(L) = データ長(ダミー)#1
<0 : データ長問い合わせ(機能コード$008xと同等)
=0 : チャンネル停止
D3(L) = 再生周波数x256
再生周波数の説明は省略。
A1(L) = リンクアレイチェーンテーブル先頭アドレス
リンクアレイチェーテーブルについての説明は省略。
戻値: D0(L) = 0 正常終了
#1 データ長には意味が無いが必ず再生の場合は 1 以上、停止ならば 0 と言う
様に指定する事。
#------------------------------------------------#
# 拡張リンクアレイチェーン出力 機能コード $003x #
#------------------------------------------------#
機能: 拡張リンクアレイチェーンテーブルによりデータを出力する。
呼出: D0(W) = $0030 + チャンネル番号(00H~0FH)
D1(L) = 音量/周波数/定位
通常出力($000x)の欄参照の事。
D2(L) = データ長(ダミー)#1
<0 : データ長問い合わせ(機能コード$008xと同等)
=0 : チャンネル停止
D3(L) = 再生周波数x256
再生周波数の説明は省略。
A1(L) = 拡張リンクアレイチェーンテーブル先頭アドレス #2
戻値: D0(L) = 0 正常終了
#1 データ長には意味が無いが必ず再生の場合は 1 以上、停止ならば 0 と言う
様に指定する事。
#2 拡張リンクアレイチェーンとは?
リンクアレイチェーンのデータ長の所がロングワード(4byte)で指定出来る
様に拡張されたPCM8++の独自機能です。
version 0.70 以降のみ、データ長のビット31を立てて置くと、逆再生が可能
になっています。
#------------------------------------------------#
# 動作モード変更 機能コード $007x #
#------------------------------------------------#
機能: 動作中のチャンネルの音量/周波数/定位を変更する。
呼出: D0(W) = $0070 + チャンネル番号(00H~0FH)
D1(L) = 音量/周波数/定位
>> 通常出力($000x)参照の事。
D3(L) = 可変周波数x256
変えたくない場合にはー1を指定する。
戻値: D0(L) = 0 正常終了
#------------------------------------------------#
# データ長問い合わせ 機能コード $008x #
#------------------------------------------------#
機能: 動作中のチャンネルの残りデータ長を取得する。
呼出: D0(W) = $0080 + チャンネル番号(00~0FH)
戻値: D0(L) = 0 チャンネルは停止中。
D0(L) > 0 通常出力中の残りのデータ長(byte)を返す。
D0(L) = -1 アレイチェーン出力中。
D0(L) = -2 リンクアレイチェーン出力中。
D0(L) = -3 拡張リンクアレイチェーン出力中。#1
#1 従来のPCM8では、単音再生モードで通常出力中となっていました。
#------------------------------------------------#
# 動作モード問い合わせ 機能コード $009x #
#------------------------------------------------#
機能: 動作中のチャンネルの音量/周波数/定位を取得する。
呼出: D0(W) = $0090 + チャンネル番号(00H~0FH)
戻値: D0(L) = 音量/周波数/定位
>> 通常出力($000x)参照
#------------------------------------------------#
# ブロックカウンタ問い合わせ 機能コード $00Ax #
#------------------------------------------------#
機能: 動作中のチャンネルのブロックカウンタを取得する。#1
呼出: D0(W) = $00A0 + チャンネル番号(00~0FH)
戻値: D0(L) = ブロックカウンタ(0~X)
#1 ブロックカウンタとは?
リンクアレイチェーン、拡張リンクアレイチェーンに於いて、いつブロック
が終了したかを得る為に使用出来ます。
以前のコールと違えばブロックが進んだ事になります。
ほとんど使い道はありませんが、拙作PLAY16++にてどうしても必要な機能で
した。
#------------------------------------------------#
# 終了 機能コード $0100 #
#------------------------------------------------#
機能: 全チャンネルの動作を解除し、現在出力中のデータブロックの出力
が完了次第、チャンネル動作を停止する。
一時停止中の場合は即座に全チャンネルの動作を打ち切る。
呼出: D0(W) = $0100
戻値: D0(L) = 0 正常終了
注意: 即時終了ではない点に十分注意すること。
即時に完全に終了させたい場合は、一時停止($0101)の後、本コールを発行する。
#------------------------------------------------#
# 一時停止 機能コード $0101 #
#------------------------------------------------#
機能: 全チャンネルの出力を即座に停止し、一時停止する。
一時停止状態でチャンネル出力または終了を行うと、全チャンネルの動作は打
ち切られる。
呼出: D0(W) = $0101
戻値: D0(L) = 0 正常終了
#------------------------------------------------#
# 一時停止解除 機能コード $0102 #
#------------------------------------------------#
機能: 一時停止を解除する。
打ち切りの後は無効。
呼出: D0(W) = $0102
戻値: D0(L) = 0 正常終了
#------------------------------------------------#
# 出力MAXチャンネル数変更 機能コード $01FA #
#------------------------------------------------#
機能: 出力チャンネル数の制御。
呼出: D0(W) = $01FA
D1(W) = MAXチャンネル数(01H~10H) #1
<0 現在出力MAXチャンネル取得。
戻値: D0(W) = (変更前の)MAXチャンネル数。
#1 範囲外の保証はしない。
#------------------------------------------------#
# MPU・MFPマスク設定 機能コード $01FB #
#------------------------------------------------#
機能: PCM8++ 割込中の MPU/MFP 割込マスクを設定する。
呼出: D0(W) = $01FB
D1(L) = 機能/マスク値
< 0 : マスク取得のみ
>=0 : マスク設定
bit 18~16 : MPU マスク
bit 15~ 8 : IMRA マスク
bit 7~ 0 : IMRB マスク
戻値: D0(L) = (変更前の)マスク値
bit 31~19 は 0 となる。
注意: 一般のプログラムでは使ってはならない。
既定値は %100_11011111_00000000
マスクされていない割込処理内からは、絶対にファンクションコールを
行ってはならない。
内容を十分理解してから使用すること。
#------------------------------------------------#
# 多重/単音モードの設定 機能コード $01FC #
#------------------------------------------------#
機能: 多重再生を許可/禁止する。
呼出: D0(W) = $01FC
戻値: D0(L) = 許可状態
1 : 許可中
注意: 現在はPCM8と違い、常に許可されています。
設定しても無駄になります。
#------------------------------------------------#
# 出力周波数モード変更 機能コード $01FD #
#------------------------------------------------#
機能: 出力周波数モードの制御。
呼出: D0(W) = $01FD
D1(W) = 出力周波数モード(00H~0BH) #1
<0 現在出力周波数モード取得。
データ 出力周波数 注意事項
00H 出力32.00KHz
01H 出力44.10KHz
02H 出力48.00KHz
03H 出力16.00KHz v3.5以上のみ
04H 出力22.05KHz 同上
05H 出力24.00KHz 同上
06H 出力32.00KHz
07H 出力44.10KHz
08H 出力48.00KHz
09H 出力16.00KHz v3.5以上のみ
0AH 出力22.05KHz 同上
0BH 出力24.00KHz 同上
06H以降は周波数固定モノラルモードです。
戻値: D0(W) = (変更前の)出力周波数モード。
#1 範囲外の保証はしない。
#------------------------------------------------#
# 占有 機能コード $01FE #
#------------------------------------------------#
機能: PCM8++を占有し、常駐解除を禁止する。
呼出: D0(W) = $01FE
戻値: D0(L) = 0 占有した。
D0(L) = -1 既に占有されている。
注意: 一般のプログラムでは使ってはならない。
内容を十分理解して使用すること。
#------------------------------------------------#
# 占有解除 機能コード $01FF #
#------------------------------------------------#
機能: PCM8++の占有を解除し、常駐解除を可能にする。
呼出: D0(W) = $01FF
戻値: D0(L) = 0 占有解除した。
D0(L) = -1 占有されていない。
注意: 一般のプログラムでは使ってはならない。
内容を十分理解して使用すること。
#------------------------------------------------#
# 常駐解除 機能コード $FFFF #
#------------------------------------------------#
機能: PCM8++の常駐を解除する。
呼出: D0(W) = $FFFF
戻値: D0(L) = 0 常駐解除が実行された
D0(L) = -1 占有されており、解除出来なかった
注意: 一般のプログラムでは使ってはならない。
--[ PCM8との相違点 ]-----------------------------------------------------------
・64Kbytes超えのリンクアレイチェーンに対応
拡張リンクアレイチェーンと呼び、データ長さ部分の所がロングワードで
指定出来る点がリンクアレイチェーンと異なります。
メモリのある限り再生が可能です。また、単純なループやブロック再生も
可能になり、作り様によっては色々なことが出来ると思います。
(ブロックの作り方だけでドラム-ハイハット-ドラム-スネア-ドラム
とかが出来ます。これはブロックを細かく切らないで出来る点に大いに意
義があるでしょう。但しドライバーが対応していないと駄目ですが。)
・チャンネルの残り長さ問い合わせ
単音再生中の所に拡張リンクアレイチェーン時のリターンコードを割り当
てています。
・多重/単音モードの設定
常に許可状態にあります。
・常駐
PCM8及びrdn、pcm8ppmの常駐がある場合、常駐出来ません。
また、PCM8での常駐解除は行わないで下さい。
・IOCSコール
DMAのCH2を使用する仕様上、IOCSコールをDMAのCH3に割り当てています。
直接DMAを叩いているようなソフトは使用しないで下さい。
その他はPCM8とほぼ同一となっております。
・PCM8++ヘッダに付いて
PCM8がTRAP #2の手前8バイトを検査するので、さらに8バイト手前に
'PCM8++ '(7bytes)が入っています。
8byte 目に バージョンナンバー+20H が入っています。#1
#1 version 0.50 以降のみ。βバージョンには入っておりません。
PCM8のヘッダも入れてあります。これで疑似的にPCM8が使用出来る事
となります。
・データの作成方法に付いて
今までのPDX作成、ZPD作成と何等変わりません。
従来のデータの作り方で作ってもらって結構です。
--[ 謝辞 ]---------------------------------------------------------------------
このソフトを作るに当たって、沢山のツールを使用させて頂きました。
各ソフトウェア、ハードウェア等の作者の方々にはこの場を借りて感謝申し上
げます。
また、数々のデバッグに協力してくれた方々に、感謝申し上げます。
--[ 転載に付いて ]-------------------------------------------------------------
基本的にどこに上げても結構ですが、Q2回線の様な営利目的のネットワーク
には禁止します。(但し、Niftyなどの大手商用ネットには可能とします)
その際には、ひとこと言ってくださるとありがたいです。
また、感想、文句(ォ、要望、次回作希望等ありましたら宜しくお願いします。
たにぃ
[EOF]